/**
 * @description user 控制层
 * @author LI
 */

const {
  createDecoratitem,
  getDecoratitemsList,
  updateDecoratitemById,
  deleteDecoratitemById
} = require('../services/decoratitem')
const { ReturnResult } = require('../model/ResultModel')

/**
 * 添加商品图片信息
 * @param {string} itemSn 项目编号
 * @param {string} itemName 项目名称
 * @param {number} itemPrice 人工辅料/单价
 * @param {string} itemUnit 项目单位
 * @param {string} itemRemark 项目备注
 */
async function addDecoratitem({ itemSn, itemName, itemPrice, itemUnit, itemRemark }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await createDecoratitem({
      itemSn,
      itemName,
      itemPrice,
      itemUnit,
      itemRemark,
    })
    return new ReturnResult(0, null, true, "添加成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "添加失败，请重试")
  }
}

/**
 * 获取全部商品图片信息
 * @param {string} itemName 装修项目名称
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getDecoratitemsAll({ itemName, page, limit }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await getDecoratitemsList({
      itemName,
      page,
      limit,
    })
    return new ReturnResult(result.count, result.rows, true, "查询成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "查询失败，请重试")
  }
}

/**
 * 更新商品项目信息
 * @param {number} id id
 * @param {string} itemSn 项目编号
 * @param {string} itemName 项目名称
 * @param {number} itemPrice 人工辅料/单价
 * @param {string} itemUnit 项目单位
 * @param {string} itemRemark 项目备注
 */
async function updateDecoratitem({ id, itemSn, itemName, itemPrice, itemUnit, itemRemark }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await updateDecoratitemById({
      id,
      itemSn,
      itemName,
      itemPrice,
      itemUnit,
      itemRemark,
    })
    return new ReturnResult(0, null, true, "更新成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "更新失败，请重试")
  }
}

/**
 * 删除商品项目信息
 * @param {number} id id
 */
async function deleteDecoratitem(id) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await deleteDecoratitemById(id)
    return new ReturnResult(0, null, true, "删除成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "删除失败，请重试")
  }
}

module.exports = {
  addDecoratitem,
  getDecoratitemsAll,
  updateDecoratitem,
  deleteDecoratitem
}
